﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace TupleGeo.GIS.SpatialSchema {

  /// <summary>
  /// 
  /// </summary>
  public interface ISpatialOperator {

    /// <summary>
    /// 
    /// </summary>
    /// <param name="value"></param>
    /// <returns></returns>
    Geometry LocateAlong(double value);

    /// <summary>
    /// 
    /// </summary>
    /// <param name="start"></param>
    /// <param name="end"></param>
    /// <returns></returns>
    Geometry LocateBetween(double start, double end);

    /// <summary>
    /// 
    /// </summary>
    /// <param name="other"></param>
    /// <returns></returns>
    Distance Distance(Geometry other);

    /// <summary>
    /// 
    /// </summary>
    /// <param name="distance"></param>
    /// <returns></returns>
    Geometry Buffer(double distance);

    /// <summary>
    /// 
    /// </summary>
    /// <param name="other"></param>
    /// <returns></returns>
    Geometry Intersection(Geometry other);

    /// <summary>
    /// 
    /// </summary>
    /// <param name="other"></param>
    /// <returns></returns>
    Geometry Union(Geometry other);

    /// <summary>
    /// 
    /// </summary>
    /// <param name="other"></param>
    /// <returns></returns>
    Geometry Difference(Geometry other);

    /// <summary>
    /// 
    /// </summary>
    /// <param name="other"></param>
    /// <returns></returns>
    Geometry SymmetricDifference(Geometry other);

    /// <summary>
    /// 
    /// </summary>
    /// <param name="other"></param>
    /// <returns></returns>
    Geometry ConvexHull(Geometry other);

  }

}
